home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 4 / The Arsenal Files 4 (Arsenal Computer).ISO / clarion / disabl.exe / CONTA009.CLW < prev    next >
Text File  |  1995-01-05  |  10KB  |  302 lines

  1.                      MEMBER('CONTACTS.clw')       ! This is a MEMBER module
  2. ReadMe PROCEDURE
  3.  
  4. LocalRequest         LONG,AUTO
  5. OriginalRequest      LONG,AUTO
  6. LocalResponse        LONG,AUTO
  7. WindowOpened         LONG
  8. WindowInitialized    LONG
  9. ForceRefresh         LONG,AUTO
  10. ASCIIFileSize        LONG
  11. ASCIIBytesThisRead   LONG
  12. ASCIIBytesRead       LONG
  13. ASCIIBytesThisCycle  LONG
  14. ASCIIPercentProgress BYTE
  15. Queue:ASCII          QUEUE
  16.                      STRING(255)
  17.                    END
  18. ASC1:FileName        STRING(80)
  19. ASC1:CurrentFileName STRING(80)
  20. ASC1:ASCIIFile        FILE,PRE(ASC1),DRIVER('ASCII'),NAME(ASCIIFileName)
  21.                        RECORD
  22. STRING                   STRING(255)
  23.                        END
  24.                      END
  25. ASC1:ReportCounter   LONG
  26. ASC1:Report REPORT,AT(1000,2500,6000,6000),FONT('Fixedsys',9,,FONT:regular),THOUS
  27. Detail                 DETAIL,AT(,,,167)
  28.                          STRING(@s255),AT(104,0,,),USE(Queue:ASCII)
  29.                        END
  30.                      END
  31. ASC1:WholeWord      BYTE
  32. ASC1:Matchcase      BYTE
  33. ASC1:Direction      CSTRING('Down')
  34. ASC1:SearchString   CSTRING(80)
  35. ASC1:CurrentPointer LONG
  36. ASC1:TextLocation   LONG
  37. ASC1:SearchWindow WINDOW('Searching Text...'),AT(43,25,267,60),FONT('MS Sans Serif',8,,),GRAY
  38.                          PROMPT('Find What:'),AT(11,5,,),USE(?ASC1:TextPrompt)
  39.                          ENTRY(@s20),AT(53,5,149,15),USE(ASC1:SearchString)
  40.                          CHECK('Match &Whole Word Only'),AT(11,30,,),USE(ASC1:WholeWord)
  41.                          CHECK('Match &Case'),AT(11,44,,),USE(ASC1:MatchCase)
  42.                          OPTION('Direction'),AT(111,28,81,26),USE(ASC1:Direction),BOXED
  43.                            RADIO('Up'),AT(117,39,,)
  44.                            RADIO('Down'),AT(149,39,,)
  45.                          END
  46.                          BUTTON('Find'),AT(208,5,53,15),USE(?ASC1:Search),DEFAULT
  47.                          BUTTON('Cancel'),AT(208,25,53,15),USE(?ASC1:CancelSearch)
  48.                          END
  49. ViewWindow           WINDOW('Read Me'),AT(33,31,296,136),FONT('Arial',9,,),HVSCROLL,SYSTEM,GRAY,MAX
  50.                        LIST,AT(5,5,285,110),FONT('FixedSys',9,,FONT:regular),USE(?AsciiBox),HVSCROLL,FROM(Queue:ASCII)
  51.                        BUTTON('&Print'),AT(135,120,35,10),USE(?ASCIIPrint)
  52.                        BUTTON('&Find...'),AT(174,120,35,10),USE(?ASCIISearch)
  53.                        BUTTON('Find Next'),AT(213,120,39,10),USE(?ASCIIRepeat)
  54.                        BUTTON('&Close'),AT(255,120,35,10),USE(?Close)
  55.                      END
  56. ProgressWindow       WINDOW('Progress...'),AT(,,142,59),CENTER,TIMER(1),GRAY,DOUBLE
  57.                        STRING(''),AT(0,3,141,10),USE(?Progress:UserString),CENTER
  58.                        BOX,AT(15,15,111,12),COLOR(00H),FILL(0FFFFFFH)
  59.                        BOX,AT(21,18,100,6),COLOR(00H),FILL(0C0C0C0H)
  60.                        BOX,AT(21,18,100,6),USE(?Progress:Thermometer),FILL(0FFH)
  61.                        STRING(''),AT(0,30,141,10),USE(?Progress:PctText),CENTER
  62.                        BUTTON('Cancel'),AT(45,42,50,15),USE(?Progress:Cancel)
  63.                      END
  64.   CODE
  65.   LocalRequest = GlobalRequest
  66.   OriginalRequest = GlobalRequest
  67.   LocalResponse = RequestCancelled
  68.   CLEAR(GlobalRequest)
  69.   CLEAR(GlobalResponse)
  70.   OPEN(ViewWindow)
  71.   WindowOpened=True
  72.   ?ASCIIRepeat{Prop:Disable}=True
  73.   ACCEPT
  74.     CASE EVENT()
  75.     OF EVENT:OpenWindow
  76.       IF NOT WindowInitialized
  77.         DO InitializeWindow
  78.       END
  79.       SELECT(?AsciiBox)
  80.     OF EVENT:GainFocus
  81.       WindowInitialized = True
  82.       DO InitializeWindow
  83.     END
  84.     CASE FIELD()
  85.     OF ?ASCIIPrint
  86.       CASE EVENT()
  87.       OF EVENT:Accepted
  88.         DO SyncWindow
  89.         SETCURSOR(CURSOR:Wait)
  90.         ASC1:ReportCounter = 0
  91.         OPEN(ASC1:Report)
  92.         LOOP
  93.           ASC1:ReportCounter += 1
  94.           IF ASC1:ReportCounter > RECORDS(Queue:ASCII)
  95.             BREAK
  96.           END
  97.           GET(Queue:ASCII,ASC1:ReportCounter)
  98.           PRINT(DETAIL)
  99.         END
  100.         CLOSE(ASC1:Report)
  101.         SETCURSOR
  102.         DO RefreshWindow
  103.       END
  104.     OF ?ASCIISearch
  105.       CASE EVENT()
  106.       OF EVENT:Accepted
  107.         DO SyncWindow
  108.         OPEN(ASC1:SearchWindow)
  109.         ACCEPT
  110.           CASE EVENT()
  111.           OF Event:OpenWindow
  112.             SELECT(?ASC1:SearchString)
  113.           OF Event:CloseWindow
  114.             CLOSE(ASC1:SearchWindow)
  115.           OF Event:Accepted
  116.             CASE FIELD()
  117.             OF ?ASC1:Search
  118.               LocalResponse = RequestCompleted
  119.               POST(Event:CloseWindow)
  120.             OF ?ASC1:CancelSearch
  121.               LocalResponse = RequestCancelled
  122.               POST(Event:CloseWindow)
  123.             END
  124.           END
  125.         END
  126.         IF LocalResponse = RequestCompleted
  127.           DO ASC1:FindText
  128.           ?ASCIIRepeat{Prop:Disable}=False
  129.         ELSE
  130.           ?ASCIIRepeat{Prop:Disable}=True
  131.         END
  132.         DO RefreshWindow
  133.       END
  134.     OF ?ASCIIRepeat
  135.       CASE EVENT()
  136.       OF EVENT:Accepted
  137.         DO SyncWindow
  138.         DO ASC1:FindText
  139.         DO RefreshWindow
  140.       END
  141.     OF ?Close
  142.       CASE EVENT()
  143.       OF EVENT:Accepted
  144.         DO SyncWindow
  145.         LocalResponse = RequestCancelled
  146.         POST(Event:CloseWindow)
  147.         DO RefreshWindow
  148.       END
  149.     END
  150.   END
  151.   IF WindowOpened
  152.     CLOSE(ViewWindow)
  153.   END
  154.   IF LocalResponse
  155.     GlobalResponse = LocalResponse
  156.   ELSE
  157.     GlobalResponse = RequestCancelled
  158.   END
  159.   RETURN
  160. !---------------------------------------------------------------------------
  161. InitializeWindow ROUTINE
  162.   ForceRefresh = True
  163.   DO RefreshWindow
  164. !---------------------------------------------------------------------------
  165. RefreshWindow ROUTINE
  166.   ASC1:FileName = 'readme.txt'
  167.   IF ASC1:FileName <> ASC1:CurrentFileName
  168.     ASCIIFileName = ASC1:FileName
  169.     DO ASC1:FillQueue
  170.     ASC1:CurrentFileName = ASC1:Filename
  171.   END
  172.   DISPLAY()
  173.   ForceRefresh = False
  174. !---------------------------------------------------------------------------
  175. SyncWindow ROUTINE
  176. !---------------------------------------------------------------------------
  177. ASC1:FillQueue ROUTINE
  178.   FREE(Queue:ASCII)
  179.   IF NOT ASCIIFileName
  180.     ?AsciiBox{Prop:Disable} = True
  181.     EXIT
  182.   ELSE
  183.     ?AsciiBox{Prop:Disable} = False
  184.   END
  185.   OPEN(ASC1:ASCIIFile,10h)
  186.   IF ERRORCODE() 
  187.     DISABLE(?AsciiBox)
  188.     IF StandardWarning(Warn:FileLoadError,ASC1:FileName)
  189.       EXIT
  190.     END
  191.   END
  192.   ASCIIFileSize = BYTES(ASC1:ASCIIFile)
  193.   IF ASCIIFileSize = 0
  194.     CLOSE(ASC1:ASCIIFile)
  195.     DISABLE(?AsciiBox)
  196.     IF StandardWarning(Warn:FileZeroLength,ASC1:FileName)
  197.       EXIT
  198.     END
  199.     EXIT
  200.   END
  201.   OPEN(ProgressWindow)
  202.   ASCIIPercentProgress = 0
  203.   ASCIIBytesRead = 0
  204.   ProgressWindow{Prop:Text} = 'Reading File'
  205.   ?Progress:Thermometer{Prop:Width} = 0
  206.   ?Progress:PctText{Prop:Text} = '0% Completed'
  207.   ?Progress:UserString{Prop:Text} = ''
  208.   ACCEPT
  209.     CASE EVENT()
  210.     OF Event:OpenWindow
  211.       SET(ASC1:ASCIIFile)
  212.     OF Event:Timer
  213.       ASCIIBytesThisCycle = 0
  214.       LOOP WHILE ASCIIBytesThisCycle < 20000
  215.         NEXT(ASC1:ASCIIFile)
  216.         IF ERRORCODE()
  217.           LocalResponse = RequestCompleted
  218.           BREAK
  219.         END
  220.         ASCIIBytesThisRead = BYTES(ASC1:ASCIIFile)
  221.         ASCIIBytesThisCycle += ASCIIBytesThisRead
  222.         ASCIIBytesRead += ASCIIBytesThisRead
  223.         Queue:ASCII = ASC1:String
  224.         ADD(Queue:ASCII)
  225.       END
  226.       IF ASCIIPercentProgress < 100
  227.         ASCIIPercentProgress = (ASCIIBytesRead/ASCIIFileSize)*100
  228.         IF ASCIIPercentProgress > 100
  229.           ASCIIPercentProgress = 100
  230.         END
  231.         ?Progress:Thermometer{Prop:Width} = ROUND(ASCIIPercentProgress,0)
  232.         ?Progress:PctText{Prop:Text} = FORMAT(ASCIIPercentProgress,@N3) & '% Completed'
  233.         DISPLAY(?Progress:Thermometer)
  234.         DISPLAY(?Progress:PctText)
  235.       END
  236.       IF LocalResponse = RequestCompleted
  237.         LocalResponse = RequestCancelled
  238.         POST(Event:CloseWindow)
  239.       END
  240.     END
  241.     CASE FIELD()
  242.     OF ?Progress:Cancel
  243.       CASE EVENT()
  244.       OF Event:Accepted
  245.         IF StandardWarning(Warn:ConfirmCancelLoad,ASC1:FileName)=Button:OK
  246.           POST(Event:CloseWindow)
  247.         END
  248.       END
  249.     END
  250.   END
  251.   CLOSE(ProgressWindow)
  252.   CLOSE(ASC1:ASCIIFile)
  253. !----------------------------------------------------------------
  254. ASC1:FindText ROUTINE
  255.   ASC1:CurrentPointer = CHOICE(?AsciiBox)
  256.   SETCURSOR(CURSOR:Wait)
  257.   LOOP
  258.     IF ASC1:Direction = 'Down'
  259.       ASC1:CurrentPointer += 1
  260.       IF ASC1:CurrentPointer = RECORDS(Queue:ASCII)
  261.         IF StandardWarning(Warn:EndOfASCIIQueue,'Down') = Button:Yes
  262.           ASC1:CurrentPointer = 1
  263.         ELSE
  264.           BREAK
  265.         END
  266.       END
  267.     ELSE
  268.       ASC1:CurrentPointer -= 1
  269.       IF ASC1:CurrentPointer = 0
  270.         IF StandardWarning(Warn:EndOfASCIIQueue,'Up') = Button:Yes
  271.           ASC1:CurrentPointer = RECORDS(Queue:ASCII)
  272.         ELSE
  273.           BREAK
  274.         END
  275.       END
  276.     END
  277.     GET(Queue:ASCII,ASC1:CurrentPointer)
  278.     IF ASC1:MatchCase
  279.       ASC1:TextLocation = INSTRING(ASC1:SearchString,Queue:ASCII,1,1)
  280.     ELSE
  281.       ASC1:TextLocation = INSTRING(UPPER(ASC1:SearchString),UPPER(Queue:ASCII),1,1)
  282.     END
  283.     IF NOT ASC1:TextLocation
  284.       CYCLE
  285.     END
  286.     IF ASC1:WholeWord
  287.       IF ASC1:TextLocation > 1
  288.         IF SUB(Queue:ASCII,ASC1:TextLocation-1,1)
  289.           CYCLE
  290.         END
  291.       END
  292.       IF ASC1:TextLocation+LEN(CLIP(ASC1:SearchString))<LEN(CLIP(Queue:ASCII))
  293.         IF SUB(Queue:ASCII,ASC1:TextLocation+LEN(CLIP(ASC1:SearchString)),1)
  294.           CYCLE
  295.         END
  296.       END
  297.     END
  298.     SELECT(?AsciiBox,ASC1:CurrentPointer)
  299.     BREAK
  300.   END
  301.   SETCURSOR
  302.